package com.xjh.basestudy.designmode.behaviorMode.behaviorMode7_Mediator.p2_mediator;

/**
 * @Author XuJianHua
 * @Date 2022/10/4 21:17
 * @Description
 * 在第5行我们直接持有聊天室的引用chatRoom，并在第15行的用户登录方法login()中将其注入进来。
 * 接着调用聊天室的连接注册方法register()与其建立连接，这意味着用户不再与其他用户建立连接了，而是连接聊天室并告知“我进来了，请进行注册”。
 * 同样，第20行的发言方法talk()以及第24行的聆听方法listen()也不与其他用户发生关联，前者会将消息直接发送给聊天室，后者则负责接收来自聊天室的消息。
 * 通过上述操作，我们斩断了多用户之间的关联，一切关联都被间接地交给中介聊天室去处理，用户与用户彻底解耦。
 * 当然，用户在离开聊天室时还应该有一个注销方法，我们会在之后加入它。接下来就是至关重要的聊天室类了，它就是中介

 */
public class User {

    private String name;//名字

    private ChatRoom chatRoom;//聊天室引用

    public User(String name) {
        this.name = name;//初始化必须起名字
    }

    public String getName() {
        return this.name;
    }

    public void login(ChatRoom chatRoom) {//用户登录
        this.chatRoom = chatRoom;//注入聊天室引用
        this.chatRoom.register(this);//调用聊天室连接注册方法
    }

    public void talk(String msg) {//用户发言
        chatRoom.sendMsg(this, msg);//给聊天室发送消息
    }

    public void listen(User fromWhom, String msg) {//用户聆听
        System.out.print("【"+this.name+"的对话框】");
        System.out.println(fromWhom.getName() + " 说： " + msg);
    }

}